Move more internals, particularly in unicsv, to QString.
authorrobertlipe <robertlipe@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Mon, 6 Oct 2014 02:45:16 +0000 (02:45 +0000)
committerrobertlipe <robertlipe@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Mon, 6 Oct 2014 02:45:16 +0000 (02:45 +0000)
16 files changed:
gpsbabel/an1.cc
gpsbabel/cet_util.cc
gpsbabel/defs.h
gpsbabel/garmin_fs.cc
gpsbabel/garmin_fs.h
gpsbabel/garmin_gpi.cc
gpsbabel/gpx.cc
gpsbabel/html.cc
gpsbabel/kml.cc
gpsbabel/parse.cc
gpsbabel/psitrex.cc
gpsbabel/text.cc
gpsbabel/tmpro.cc
gpsbabel/unicsv.cc
gpsbabel/util.cc
gpsbabel/vcf.cc

index f2be0dd3520ed6767f44f75400a759c12219976d..4638c21a1a4d872f782e2696069ba4ec2080dcef 100644 (file)
@@ -814,16 +814,13 @@ Write_One_AN1_Waypoint(const Waypoint* wpt)
 
   if (rec->type == 0x12) {    /* image */
     if (wpt->icon_descr.contains(":\\")) {
-      rec->image_name = xstrdup(CSTR(wpt->icon_descr));
+      rec->image_name = xstrdup(wpt->icon_descr);
       rec->height = -244;
       rec->width = -1;
     }
   }
   if (!rec->image_name && !wpt->icon_descr.isNull()) {
-// FIXME: WTH?
-    char* t = xstrdup(CSTR(wpt->icon_descr));
-    FindIconByName(t, &rec->guid);
-    xfree(t);
+    FindIconByName(CSTR(wpt->icon_descr), &rec->guid);
   }
 
   Write_AN1_Waypoint(outfile, rec);
index 256f93dc8a21f63c36f5c814e284ef2b3cc11170..b1566533f0c0babf315d44419e89501409b62064 100644 (file)
@@ -438,7 +438,7 @@ cet_convert_string(const QString& str)
   // FIXME: this is really weird.  Since cet_convert_string wants to free
   // its argument (!) we make a duplicate just to satisfy that kind of goofy
   // requirement.
-  return cet_convert_string(xstrdup(CSTR(str)));
+  return cet_convert_string(xstrdup(str));
 }
 
 /* cet_convert_waypt: internal used within cet_convert_strings process */
index d9d4988d2237ffcbc738848e56317509bdc4bcef..11c6315c35fe441f06fdf1b09bf963de4ed60c79 100644 (file)
@@ -1005,7 +1005,7 @@ const char* get_filename(const char* fname);                      /* extract the filename portion *
 /* this lives in gpx.c */
 gpsbabel::DateTime xml_parse_time(const QString& cdatastr);
 
-char* rot13(const QString& str);
+QString rot13(const QString& str);
 
 /*
  * PalmOS records like fixed-point numbers, which should be rounded
@@ -1113,9 +1113,14 @@ int gb_ptr2int(const void* p);
  */
 int parse_coordinates(const char* str, int datum, const grid_type grid,
                       double* latitude, double* longitude, const char* module);
+int parse_coordinates(const QString& str, int datum, const grid_type grid,
+                      double* latitude, double* longitude, const char* module);
 int parse_distance(const char* str, double* val, double scale, const char* module);
+int parse_distance(const QString& str, double* val, double scale, const char* module);
 int parse_speed(const char* str, double* val, const double scale, const char* module);
+int parse_speed(const QString& str, double* val, const double scale, const char* module);
 time_t parse_date(const char* str, const char* format, const char* module);
+time_t parse_date(const QString& str, const char* format, const char* module);
 
 /*
  *  From util_crc.c
index ab767630f6922d1413b8ceabd35ec2e93d65495d..70021d73b769bce28eb00123ab1565ca2b9bbf6b 100644 (file)
@@ -288,7 +288,7 @@ garmin_fs_xml_convert(const int base_tag, int tag, const QString& Qcdatastr, Way
 {
   garmin_fs_t* gmsd;
 // FIXME: eliminate C string copy/use here:
-  const char *cdatastr = xstrdup(CSTR(Qcdatastr));
+  const char *cdatastr = xstrdup(Qcdatastr);
   gmsd = GMSD_FIND(waypt);
   if (gmsd == NULL) {
     gmsd = garmin_fs_alloc(-1);
index 182e2bd7140745e633de1f13362822858e6c937a..37eef297655097fe110fc774422ada1efaf5b461 100644 (file)
@@ -52,6 +52,7 @@
 
 /* GMSD_SETSTR(a,b): a = gmsd field, b = null terminated source */
 #define GMSD_SETSTR(a,b) if (gmsd && (b) && (b)[0]) { gmsd->a = xstrdup((b)); gmsd->flags.a = 1; }
+#define GMSD_SETQSTR(a,b) if (gmsd) { gmsd->a = xstrdup((b)); gmsd->flags.a = 1; }
 #define GMSD_SETSTRQ(a,b) if (gmsd && !b.isEmpty())  { gmsd->a = xstrdup((b)); gmsd->flags.a = 1; }
 
 /* GMSD_SETNSTR(a,b,c): a = gmsd field, b = source, c = sizeof(source) */
index 1b6334f58b90e4d695242e05d257e173037eff54..ed524a24b78a5d0903ad4dd271107c28903016f3 100644 (file)
@@ -963,7 +963,7 @@ wdata_compute_size(writer_data_t* data)
 
     if (!str.isEmpty()) {
       dt->addr_is_dynamic = 1;
-      dt->addr = xstrdup(CSTR(str));
+      dt->addr = xstrdup(str);
       dt->mask |= GPI_ADDR_ADDR;
       dt->sz += (8 + strlen(dt->addr));
     }
@@ -1058,14 +1058,9 @@ wdata_write(const writer_data_t* data)
     if (str.isEmpty()) {
       str = wpt->notes;
     }
-//             if (str && (strcmp(str, wpt->shortname) == 0)) str = NULL;
 
     gbfputint32(0x80002, fout);
-#if NEW_STRINGS
     s0 = s1 = 19 + wpt->shortname.length();
-#else
-    s0 = s1 = 19 + strlen(wpt->shortname);
-#endif
     if (! opt_hide_bitmap) {
       s0 += 10;  /* tag(4) */
     }
index 7e9337aa41022dbcd8c5143cca64ee44bf535d67..c2d2331a1e5f341d0263415a883ba3b0543ff25f 100644 (file)
@@ -808,7 +808,7 @@ xml_parse_time(const QString& dateTimeString)
   int off_sign = 1;
   char* offsetstr = NULL;
   char* pointstr = NULL;
-  char* timestr = xstrdup(CSTR(dateTimeString));
+  char* timestr = xstrdup(dateTimeString);
 
   offsetstr = strchr(timestr, 'Z');
   if (offsetstr) {
index 6d7f295b0b30978f24d48ecdb6d020a2693cea25..6c7265d1d1747e11d2b56327aeeb272719178ebe 100644 (file)
@@ -139,14 +139,13 @@ html_disp(const Waypoint* wpt)
     xfree(tmpstr);
   }
   if (!wpt->gc_data->hint.isEmpty()) {
-    char* hint = NULL;
+    QString hint;
     if (html_encrypt) {
       hint = rot13(wpt->gc_data->hint);
     } else {
-      hint = xstrdup(CSTR(wpt->gc_data->hint));
+      hint = wpt->gc_data->hint;
     }
-    gbfprintf(file_out, "<p class=\"gpsbabelhint\"><strong>Hint:</strong> %s</p>\n", hint);
-    xfree(hint);
+    gbfprintf(file_out, "<p class=\"gpsbabelhint\"><strong>Hint:</strong> %s</p>\n", CSTR(hint));
   } else if (!wpt->notes.isEmpty() && (wpt->description.isEmpty() || wpt->notes != wpt->description)) {
     gbfprintf(file_out, "<p class=\"gpsbabelnotes\">%s</p>\n", CSTRc(wpt->notes));
   }
@@ -214,22 +213,19 @@ html_disp(const Waypoint* wpt)
       logpart = xml_findfirst(curlog, "groundspeak:text");
       if (logpart) {
         char* encstr = NULL;
-        char* s = NULL;
-        char* t = NULL;
         int encoded = 0;
         encstr = xml_attribute(logpart, "encoded");
         encoded = (toupper(encstr[0]) != 'F');
 
+        QString s;
         if (html_encrypt && encoded) {
           s = rot13(logpart->cdata);
         } else {
           s = xstrdup(logpart->cdata);
         }
 
-        t = html_entitize(s);
-        gbfprintf(file_out, "%s", t);
-        xfree(t);
-        xfree(s);
+        QString t = html_entitize(s);
+        gbfputs(t, file_out);
       }
 
       gbfprintf(file_out, "</p>\n");
index e1532410fd750b1309651307648aff3a54010784..5a5a47b852127ec6df912c769a05f5952f682026 100644 (file)
@@ -1389,12 +1389,12 @@ QString kml_geocache_get_logs(const Waypoint* wpt)
     logpart = xml_findfirst(curlog, "groundspeak:text");
     if (logpart) {
       char* encstr = NULL;
-      char* s = NULL;
       char* t = NULL;
       int encoded = 0;
       encstr = xml_attribute(logpart, "encoded");
       encoded = (toupper(encstr[0]) != 'F');
 
+      QString s;
       if (html_encrypt && encoded) {
         s = rot13(logpart->cdata);
       } else {
@@ -1405,7 +1405,6 @@ QString kml_geocache_get_logs(const Waypoint* wpt)
       t = html_entitize(s);
       r = r + t;
       xfree(t);
-      xfree(s);
     }
 
     r += "</p>";
index 4b056eef6625975efc74bf72285829b3edd4ad2b..a3fbd296a4cddc3abbb68c840ccd27c3e1b72e9f 100644 (file)
@@ -48,7 +48,6 @@ parse_distance(const char* str, double* val, double scale, const char* module)
   if ((str == NULL) || (*str == '\0')) {
     return 0;
   }
-
   *val = strtod(str, &unit);
   if (unit == NULL) {
     fatal("%s: Unconvertable numeric value (%s)!\n", module, str);
@@ -88,6 +87,11 @@ parse_distance(const char* str, double* val, double scale, const char* module)
   return 2;
 }
 
+int
+parse_distance(const QString& str, double* val, double scale, const char* module) {
+  return parse_distance(CSTR(str), val, scale, module);
+}
+
 /*
  * parse_speed:
  *
@@ -144,6 +148,12 @@ parse_speed(const char* str, double* val, const double scale, const char* module
   return 2;
 }
 
+int
+parse_speed(const QString& str, double* val, const double scale, const char* module)
+{
+  return parse_speed(str, val, scale, module);
+}
+
 /*
  * Convert string 'str' into geodetic latitide & longitude values. The format
  * will be interpreted depending on 'grid' parameter.
@@ -274,3 +284,11 @@ parse_coordinates(const char* str, int datum, const grid_type grid,
 
   return result;
 }
+
+int
+parse_coordinates(const QString& str, int datum, const grid_type grid,
+                  double* latitude, double* longitude, const char* module)
+{
+  return parse_coordinates(str, datum, grid,
+                           latitude, longitude, module);
+}
index 7055e28fd6c5c278374d6d7233a08acd9132f164..ec4f83c2c92a1d638c6143a6ce80cfdd1bc4eda3 100644 (file)
@@ -357,7 +357,7 @@ psit_waypoint_w(gbfile* psit_file, const Waypoint* wpt)
 
   ident = global_opts.synthesize_shortnames ?
           mkshort(mkshort_handle, src) :
-          xstrdup(CSTRc(wpt->shortname));
+          xstrdup(wpt->shortname);
 
   gbfprintf(psit_file, " %-6s, ", ident);
   xfree(ident);
index bb50d0146f4099ddf9e1159df4dd510a2991a6a5..b34ff12911823938299b851e4db09fba645e6f42 100644 (file)
@@ -152,14 +152,13 @@ text_disp(const Waypoint* wpt)
       xfree(stripped_html);
     }
     if (!wpt->gc_data->hint.isEmpty()) {
-      char* hint = NULL;
+      QString hint;
       if (txt_encrypt) {
         hint = rot13(wpt->gc_data->hint);
       } else {
         hint = xstrdup(wpt->gc_data->hint);
       }
-      gbfprintf(file_out, "\nHint: %s\n", hint);
-      xfree(hint);
+      gbfprintf(file_out, "\nHint: %s\n", CSTR(hint));
     }
   } else if (!wpt->notes.isEmpty() && (wpt->description.isEmpty() || wpt->notes != wpt->description)) {
     gbfputs("\n", file_out);
@@ -228,19 +227,18 @@ text_disp(const Waypoint* wpt)
       logpart = xml_findfirst(curlog, "groundspeak:text");
       if (logpart) {
         char* encstr = NULL;
-        char* s = NULL;
         int encoded = 0;
         encstr = xml_attribute(logpart, "encoded");
         encoded = (toupper(encstr[0]) != 'F');
 
+        QString s;
         if (txt_encrypt && encoded) {
           s = rot13(logpart->cdata);
         } else {
-          s = xstrdup(logpart->cdata);
+          s = logpart->cdata;
         }
 
-        gbfprintf(file_out, "%s", s);
-        xfree(s);
+        gbfputs(s, file_out);
       }
 
       gbfprintf(file_out, "\n");
index a7048c88695a84a7cc6300972e6f6ab7fab141e0..1875b4964df7bb67474beca33ba098d9eb926b7d 100644 (file)
@@ -209,7 +209,7 @@ tmpro_waypt_pr(const Waypoint* wpt)
   if (wpt->HasUrlLink()) {
     // Yes, it's lame to allocate/copy here.
     UrlLink link = wpt->GetUrlLink();
-    l = xstrdup(CSTR(link.url_));
+    l = xstrdup(link.url_);
   }
   gbfprintf(file_out, "new\t%.6s\t%.80s\t%08.6f\t%08.6f\t\t\t%.2f\t%d\t%d\t%.128s\n",
             CSTRc(shortname),
index c853acf504f5c01fce2b4ce4d62c034199aea981..f805f8dcee3b6f48c9928165c3736cb5c2a840b3 100644 (file)
@@ -302,38 +302,21 @@ unicsv_strrcmp(const char* s1, const char* s2)
   }
 }
 
-
+// There is no test coverage of this and it's been wrong for years and
+// nobody has noticed...
 static int
-unicsv_parse_gc_id(const char* str)
+unicsv_parse_gc_id(const QString& str)
 {
   int res = 0;
-
-  if (str && (str[0] == 'G') && (str[1] == 'C')) {
-    int base;
-    char cx;
-
-    str += 2;
-    if (strlen(str) > 4) {
-      base = 31;
-    } else {
-      base = (*str < 'G') ? 16 : 31;
-    }
-    // FIXME: this is wrong. 0123456789ABCDEFGHJKMNPQRTVWXYZ  ILOSU are omitted.
-    // That nobody has noticed is a good hint nobody cares...
-    while ((cx = *str++)) {
-      int num;
-
-      if ((cx >= '0') && (cx <= '9')) {
-        num = cx - '0';
-      } else if ((cx >= 'A') && (cx <= 'Z')) {
-        num = cx - 'A' + 10;
-      } else {
-        break;
-      }
-
-      res = (res * base) + num;
-    }
-    if (base == 31) {
+  const QString kBase35 = "0123456789ABCDEFGHJKMNPQRTVWXYZ"; //  ILOSU are omitted.
+  if (str.startsWith("GC")) {
+    int base35 = str.size() > 6; // above GCFFFF? 
+    QString s = str.mid(2);
+    while (!s.isEmpty()) {
+      res = res * 16 + kBase35.indexOf(s[0]);
+      s = str.mid(1);
+    }
+    if (base35) {
       res -= 411120;
     }
   }
@@ -430,20 +413,26 @@ unicsv_parse_time(const char* str, int* msec, time_t* date)
   return ((hour * SECONDS_PER_HOUR) + (min * 60) + (int)sec);
 }
 
+static time_t
+unicsv_parse_time(const QString& str, int* msec, time_t* date)
+{
+  return unicsv_parse_time(CSTR(str), msec, date);
+}
+
 static status_type
-unicsv_parse_status(const char* str)
+unicsv_parse_status(const QString& str)
 {
-  if ((case_ignore_strcmp(str, "true") == 0) ||
-      (case_ignore_strcmp(str, "yes") == 0) ||
-      (*str == '1')) {
+  if (str.compare("true", Qt::CaseInsensitive) == 0 ||
+      str.compare("yes", Qt::CaseInsensitive) == 0 ||
+      str == "1") {
     return status_true;
-  } else if ((case_ignore_strcmp(str, "false") == 0) ||
-             (case_ignore_strcmp(str, "no") == 0) ||
-             (*str == '0')) {
+  }
+  if (str.compare("false", Qt::CaseInsensitive) == 0 ||
+      str.compare("no", Qt::CaseInsensitive) == 0 ||
+      str == "0") {
     return status_false;
-  } else {
-    return status_unknown;
   }
+return status_unknown;
 }
 
 static QDateTime
@@ -517,10 +506,9 @@ unicsv_compare_fields(const QString& s, const field_t* f)
 
 
 static void
-unicsv_fondle_header(const char* ibuf)
+unicsv_fondle_header(QString s)
 {
   // TODO: clean up this back and forth between QString and char*.
-  QString s = QString(ibuf);
   char* buf = NULL;
   char* cbuf_start = NULL;
   int column;
@@ -537,7 +525,7 @@ unicsv_fondle_header(const char* ibuf)
   } else if (s.contains('|')) {
     unicsv_fieldsep = "|";
   }
-  cbuf_start = xstrdup(CSTR(s.toLower()));
+  cbuf_start = xstrdup(s.toLower());
   const char* cbuf = cbuf_start;
 
   /* convert the header line into native ascii */
@@ -636,7 +624,6 @@ unicsv_rd_deinit(void)
 static void
 unicsv_parse_one_line(char* ibuf)
 {
-  char* s;
   Waypoint* wpt = NULL;
   int column;
   int  utm_zone = -9999;
@@ -650,7 +637,8 @@ unicsv_parse_one_line(char* ibuf)
   double swiss_easting = unicsv_unknown;
   double swiss_northing = unicsv_unknown;
   int checked = 0;
-  time_t date = -1, time = -1;
+  time_t date = -1; 
+  time_t time = -1;
   int msec = -1;
   char is_localtime = 0;
   garmin_fs_t* gmsd;
@@ -666,8 +654,8 @@ unicsv_parse_one_line(char* ibuf)
   memset(&ymd, 0, sizeof(ymd));
 
   column = -1;
-  while ((s = csv_lineparse(ibuf, unicsv_fieldsep, "\"", 0))) {
-
+  QString s;
+  while ((s = csv_lineparse(ibuf, unicsv_fieldsep, "\"", 0)), !s.isNull()) {
     if (column > unicsv_fields_tab_ct) {
       break;  /* ignore extra fields on line */
     }
@@ -676,9 +664,8 @@ unicsv_parse_one_line(char* ibuf)
 
     column++;
     checked++;
-
-    s = lrtrim(s);
-    if (! *s) {
+    s = s.trimmed();
+    if (s.isEmpty()) {
       continue;  /* skip empty columns */
     }
     switch (unicsv_fields_tab[column]) {
@@ -687,7 +674,7 @@ unicsv_parse_one_line(char* ibuf)
     case fld_date:
     case fld_datetime:
       /* switch column type if it looks like an iso time string */
-      if (strchr(s, 'T')) {
+      if (s.contains('T')) {
         unicsv_fields_tab[column] = fld_iso_time;
       }
       break;
@@ -699,12 +686,12 @@ unicsv_parse_one_line(char* ibuf)
     switch (unicsv_fields_tab[column]) {
 
     case fld_latitude:
-      human_to_dec(s, &wpt->latitude, &wpt->longitude, 1);
+      human_to_dec(CSTR(s), &wpt->latitude, &wpt->longitude, 1);
       wpt->latitude = wpt->latitude * ns;
       break;
 
     case fld_longitude:
-      human_to_dec(s, &wpt->latitude, &wpt->longitude, 2);
+      human_to_dec(CSTR(s), &wpt->latitude, &wpt->longitude, 2);
       wpt->longitude = wpt->longitude * ew;
       break;
 
@@ -734,19 +721,19 @@ unicsv_parse_one_line(char* ibuf)
       break;
 
     case fld_utm_zone:
-      utm_zone = atoi(s);
+      utm_zone = s.toInt();
       break;
 
     case fld_utm_easting:
-      utm_easting = atof(s);
+      utm_easting = s.toDouble();
       break;
 
     case fld_utm_northing:
-      utm_northing = atof(s);
+      utm_northing = s.toDouble();
       break;
 
     case fld_utm_zone_char:
-      utm_zc = toupper(s[0]);
+      utm_zc = s[0].toUpper().toLatin1();
       break;
 
     case fld_utm:
@@ -766,16 +753,16 @@ unicsv_parse_one_line(char* ibuf)
       break;
 
     case fld_bng_zone:
-      strncpy(bng_zone, s, sizeof(bng_zone) -1);
+      strncpy(bng_zone, CSTR(s), sizeof(bng_zone) -1);
       strupper(bng_zone);
       break;
 
     case fld_bng_northing:
-      bng_northing = atof(s);
+      bng_northing = s.toDouble();
       break;
 
     case fld_bng_easting:
-      bng_easting = atof(s);
+      bng_easting = s.toDouble();
       break;
 
     case fld_swiss:
@@ -787,36 +774,36 @@ unicsv_parse_one_line(char* ibuf)
       break;
 
     case fld_swiss_easting:
-      swiss_easting = atof(s);
+      swiss_easting = s.toDouble();
       break;
 
     case fld_swiss_northing:
-      swiss_northing = atof(s);
+      swiss_northing = s.toDouble();
       break;
 
     case fld_hdop:
-      wpt->hdop = atof(s);
+      wpt->hdop = s.toDouble();
       if (unicsv_detect) {
         unicsv_data_type = trkdata;
       }
       break;
 
     case fld_pdop:
-      wpt->pdop = atof(s);
+      wpt->pdop = s.toDouble();
       if (unicsv_detect) {
         unicsv_data_type = trkdata;
       }
       break;
 
     case fld_vdop:
-      wpt->vdop = atof(s);
+      wpt->vdop = s.toDouble();
       if (unicsv_detect) {
         unicsv_data_type = trkdata;
       }
       break;
 
     case fld_sat:
-      wpt->sat = atoi(s);
+      wpt->sat = s.toInt();
       if (unicsv_detect) {
         unicsv_data_type = trkdata;
       }
@@ -843,14 +830,14 @@ unicsv_parse_one_line(char* ibuf)
 
     case fld_utc_date:
       if ((is_localtime < 2) && (date < 0)) {
-        date = unicsv_parse_date(s, NULL);
+        date = unicsv_parse_date(CSTR(s), NULL);
         is_localtime = 0;
       }
       break;
 
     case fld_utc_time:
       if ((is_localtime < 2) && (time < 0)) {
-        time = unicsv_parse_time(s, &msec, &date);
+        time = unicsv_parse_time(CSTR(s), &msec, &date);
         is_localtime = 0;
       }
       break;
@@ -865,42 +852,42 @@ unicsv_parse_one_line(char* ibuf)
       break;
 
     case fld_course:
-      WAYPT_SET(wpt, course, atof(s));
+      WAYPT_SET(wpt, course, s.toDouble());
       if (unicsv_detect) {
         unicsv_data_type = trkdata;
       }
       break;
 
     case fld_temperature:
-      d = atof(s);
+      d = s.toDouble();
       if (fabs(d) < 999999) {
         WAYPT_SET(wpt, temperature, d);
       }
       break;
 
     case fld_temperature_f:
-      d = atof(s);
+      d = s.toDouble();
       if (fabs(d) < 999999) {
         WAYPT_SET(wpt, temperature, FAHRENHEIT_TO_CELSIUS(d));
       }
       break;
 
     case fld_heartrate:
-      wpt->heartrate = atoi(s);
+      wpt->heartrate = s.toInt();
       if (unicsv_detect) {
         unicsv_data_type = trkdata;
       }
       break;
 
     case fld_cadence:
-      wpt->cadence = atoi(s);
+      wpt->cadence = s.toInt();
       if (unicsv_detect) {
         unicsv_data_type = trkdata;
       }
       break;
 
     case fld_power:
-      wpt->power = atof(s);
+      wpt->power = s.toDouble();
       if (unicsv_detect) {
         unicsv_data_type = trkdata;
       }
@@ -929,56 +916,56 @@ unicsv_parse_one_line(char* ibuf)
 
     case fld_time:
       if ((is_localtime < 2) && (time < 0)) {
-        time = unicsv_parse_time(s, &msec, &date);
+        time = unicsv_parse_time(CSTR(s), &msec, &date);
         is_localtime = 1;
       }
       break;
 
     case fld_date:
       if ((is_localtime < 2) && (date < 0)) {
-        date = unicsv_parse_date(s, NULL);
+        date = unicsv_parse_date(CSTR(s), NULL);
         is_localtime = 1;
       }
       break;
 
     case fld_year:
-      ymd.tm_year = atoi(s);
+      ymd.tm_year = s.toInt();
       break;
 
     case fld_month:
-      ymd.tm_mon = atoi(s);
+      ymd.tm_mon = s.toInt();
       break;
 
     case fld_day:
-      ymd.tm_mday = atoi(s);
+      ymd.tm_mday = s.toInt();
       break;
 
     case fld_hour:
-      ymd.tm_hour = atoi(s);
+      ymd.tm_hour = s.toInt();
       break;
 
     case fld_min:
-      ymd.tm_min = atoi(s);
+      ymd.tm_min = s.toInt();
       break;
 
     case fld_sec:
-      ymd.tm_sec = atoi(s);
+      ymd.tm_sec = s.toInt();
       break;
 
     case fld_datetime:
       if ((is_localtime < 2) && (date < 0) && (time < 0)) {
-        time = unicsv_parse_time(s, &msec, &date);
+        time = unicsv_parse_time(CSTR(s), &msec, &date);
         is_localtime = 1;
       }
       break;
 
     case fld_ns:
-      ns = tolower(s[0]) == 'n' ? 1 : -1;
+      ns = s.startsWith('n', Qt::CaseInsensitive) ? 1 : -1;
       wpt->latitude *= ns;
       break;
 
     case fld_ew:
-      ew = tolower(s[0]) == 'e' ? 1 : -1;
+      ns = s.startsWith('e', Qt::CaseInsensitive) ? 1 : -1;
       wpt->longitude *= ew;
       break;
 
@@ -999,34 +986,34 @@ unicsv_parse_one_line(char* ibuf)
       }
       switch (unicsv_fields_tab[column]) {
       case fld_garmin_city:
-        GMSD_SETSTR(city, s);
+        GMSD_SETQSTR(city, s);
         break;
       case fld_garmin_postal_code:
-        GMSD_SETSTR(postal_code, s);
+        GMSD_SETQSTR(postal_code, s);
         break;
       case fld_garmin_state:
-        GMSD_SETSTR(state, s);
+        GMSD_SETQSTR(state, s);
         break;
       case fld_garmin_country:
-        GMSD_SETSTR(country, s);
+        GMSD_SETQSTR(country, s);
         break;
       case fld_garmin_addr:
-        GMSD_SETSTR(addr, s);
+        GMSD_SETQSTR(addr, s);
         break;
       case fld_garmin_phone_nr:
-        GMSD_SETSTR(phone_nr, s);
+        GMSD_SETQSTR(phone_nr, s);
         break;
       case fld_garmin_phone_nr2:
-        GMSD_SETSTR(phone_nr2, s);
+        GMSD_SETQSTR(phone_nr2, s);
         break;
       case fld_garmin_fax_nr:
-        GMSD_SETSTR(fax_nr, s);
+        GMSD_SETQSTR(fax_nr, s);
         break;
       case fld_garmin_email:
-        GMSD_SETSTR(email, s);
+        GMSD_SETQSTR(email, s);
         break;
       case fld_garmin_facility:
-        GMSD_SETSTR(facility, s);
+        GMSD_SETQSTR(facility, s);
         break;
       default:
         break;
@@ -1050,7 +1037,7 @@ unicsv_parse_one_line(char* ibuf)
       switch (unicsv_fields_tab[column]) {
 
       case fld_gc_id:
-        gc_data->id = atoi(s);
+        gc_data->id = s.toInt();
         if (gc_data->id == 0) {
           gc_data->id = unicsv_parse_gc_id(s);
         }
@@ -1062,10 +1049,10 @@ unicsv_parse_one_line(char* ibuf)
         gc_data->container = gs_mkcont(s);
         break;
       case fld_gc_terr:
-        gc_data->terr = atof(s) * 10;
+        gc_data->terr = s.toDouble() * 10;
         break;
       case fld_gc_diff:
-        gc_data->diff = atof(s) * 10;
+        gc_data->diff = s.toDouble() * 10;
         break;
       case fld_gc_is_archived:
         gc_data->is_archived = unicsv_parse_status(s);
@@ -1095,7 +1082,7 @@ unicsv_parse_one_line(char* ibuf)
         gc_data->placer = s;
         break;
       case fld_gc_placer_id:
-        gc_data->placer_id = atoi(s);
+        gc_data->placer_id = s.toInt();
         break;
       case fld_gc_hint:
         gc_data->hint = s;
index eb8ec51156313bbe1b103b1f7f7b87ce858d96aa..abb67520c4bb52e4710ccc3c8f6b52a9aac2e969 100644 (file)
@@ -1165,10 +1165,10 @@ strlower(char* src)
   return src;
 }
 
-char*
+QString
 rot13(const QString& s)
 {
-  char* result = xstrdup(CSTR(s));
+  char* result = xstrdup(s);
   char* cur = result;
   int flip = 1;
   while (cur && *cur) {
@@ -1185,7 +1185,9 @@ rot13(const QString& s)
     }
     cur++;
   }
-  return result;
+  QString r(result);
+  xfree(result);
+  return r;
 }
 
 /*
@@ -1406,8 +1408,8 @@ strip_nastyhtml(const QString& in)
   char* returnstr, *sp;
   char* lcstr, *lcp;
 
-  sp = returnstr = xstrdup(CSTR(in));
-  lcp = lcstr = strlower(xstrdup(CSTR(in)));
+  sp = returnstr = xstrdup(in);
+  lcp = lcstr = strlower(xstrdup(in));
 
   while (lcp = strstr(lcstr, "<body>"), NULL != lcp) {
     sp = returnstr + (lcp - lcstr) ; /* becomes <!   > */
index 7816ec186ceee220c10826f87080dadfbfe67a87..89b166fb86856b9fedc465d131f6edd8d3addd7a 100644 (file)
@@ -94,6 +94,12 @@ vcf_print(const char* s)
   xfree(p);
 }
 
+static void
+vcf_print(const QString& s)
+{
+  vcf_print(CSTR(s));
+}
+
 static void
 vcf_disp(const Waypoint* wpt)
 {
@@ -117,9 +123,8 @@ vcf_disp(const Waypoint* wpt)
   vcf_print_utf(&wpt->gc_data->desc_long);
   gbfprintf(file_out, "\\n\\nHINT:\\n");
   if (vcf_encrypt) {
-    char* s = rot13(wpt->gc_data->hint);
+    QString s = rot13(wpt->gc_data->hint);
     vcf_print(s);
-    xfree(s);
   } else {
     vcf_print(CSTR(wpt->gc_data->hint));
   }